From d294054c63659638d5c874f01fe2df22a6e99cf5 Mon Sep 17 00:00:00 2001 From: GPSBabel <12013583+GPSBabelDeveloper@users.noreply.github.com> Date: Sun, 6 Feb 2022 16:24:56 -0600 Subject: [PATCH] Use smart pointers over xmalloc and manual life management (#833) * Use reference counted pointers instead of managing our own. Fixes a leak when using debug printing. --- garmin_gpi.cc | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/garmin_gpi.cc b/garmin_gpi.cc index 123d08dcf..74fc07b33 100644 --- a/garmin_gpi.cc +++ b/garmin_gpi.cc @@ -726,9 +726,9 @@ read_tag(const char* caller, const int tag, Waypoint* wpt) #ifdef GPI_DBG { int x; - unsigned char* b = (unsigned char*) xmalloc(sz); + std::unique_ptr b(new unsigned char(sz)); fprintf(stderr, "Tag: %x\n", tag); - gbfread(b, 1, sz, fin); + gbfread(b.get(), 1, sz, fin); fprintf(stderr, "\n"); for (x = 0; x < sz; x++) { fprintf(stderr, "%02x ", b[x]); @@ -1267,7 +1267,6 @@ load_bitmap_from_file(const char* fname, unsigned char** data, int* data_sz) int dest_bpp; int src_line_sz, dest_line_sz; bmp_header_t src_h; - uint32_t* color_table = nullptr; gpi_bitmap_header_t* dest_h; unsigned char* ptr; @@ -1326,9 +1325,10 @@ load_bitmap_from_file(const char* fname, unsigned char** data, int* data_sz) fatal(MYNAME ": Sorry, we don't support compressed bitmaps.\n"); } + std::unique_ptr color_table; if (src_h.used_colors > 0) { - color_table = new uint32_t[src_h.used_colors]; - gbfread(color_table, 1, 4 * src_h.used_colors, f); + color_table.reset(new uint32_t[src_h.used_colors]); + gbfread(color_table.get(), 1, 4 * src_h.used_colors, f); for (i = 0; i < src_h.used_colors; i++) { uint32_t color = color_table[i]; /* swap blue and red value */ @@ -1416,7 +1416,6 @@ load_bitmap_from_file(const char* fname, unsigned char** data, int* data_sz) if (bytesout != *data_sz) { warning(MYNAME ": Code error in load_bitmap_from_file, expected output size %d, actual output %td.", *data_sz, bytesout); } - delete[] color_table; gbfclose(f); } -- 2.30.2